tg-me.com/sqlhub/1900
Last Update:
🧠 Хитрая задача по SQL: максимум без агрегатов?
У тебя есть таблица orders
со следующими полями:
orders(id, customer_id, order_date, amount)
📌 Задача:
Для каждого клиента (`customer_id`) найти наиболее поздний заказ (по
order_date`), **не используя `GROUP BY
и `MAX()`**.🔥 Уловка:
DISTINCT ON
, TOP 1 WITH TIES
и RANK()
нельзя — ты ограничен базовым SQL, работающим на большинстве СУБД.💡 Подумай:
Как ты решишь эту задачу только с
JOIN
, WHERE
и EXISTS
?📥 Ожидаемый результат:
```sql
customer_id | order_id | order_date | amount
------------|----------|------------|--------
1001 | 87 | 2024-12-01 | 320.00
1002 | 91 | 2024-12-05 | 175.00
...
```
🧩 Подсказка:
Можно использовать
NOT EXISTS
, чтобы выбрать заказы, у которых нет более новых у того же клиента.
SELECT o.*
FROM orders o
WHERE NOT EXISTS (
SELECT 1
FROM orders o2
WHERE o2.customer_id = o.customer_id
AND o2.order_date > o.order_date
)
📎 Такой приём полезен:
• Когда нельзя использовать оконные функции
• Когда ты работаешь на старых версиях СУБД
• Когда нужна универсальность между MySQL / Oracle / SQLite
#SQL #Задача #БазыДанных #DataEngineering #Оптимизация
@sqlhub
BY Data Science. SQL hub
Warning: Undefined variable $i in /var/www/tg-me/post.php on line 283
Share with your friend now:
tg-me.com/sqlhub/1900